/**
 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
 *
 * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
 * copy, modify, and distribute this software in source code or binary form for use
 * in connection with the web services and APIs provided by Facebook.
 *
 * As with any software that integrates with the Facebook platform, your use of
 * this software is subject to the Facebook Developer Principles and Policies
 * [http://developers.facebook.com/policy/]. This copyright notice shall be
 * included in all copies or substantial portions of the software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package com.example.places.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.net.HttpURLConnection;

/**
 * In your applications, use Fresco for image download, caching and display.
 * https://github.com/facebook/fresco
 */
public class BitmapDownloadTask implements Runnable {

    private final String url;
    private final WeakReference<Listener> listenerWeakReference;

    public interface Listener {
        void onBitmapDownloadSuccess(String url, Bitmap bitmap);
        void onBitmapDownloadFailure(String url);
    }

    public BitmapDownloadTask(String url, Listener listener) {
        this.url = url;
        listenerWeakReference = new WeakReference<>(listener);
    }

    @Override
    public void run() {
        try {
            HttpURLConnection connection =
                    (HttpURLConnection) new java.net.URL(url).openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap bitmap = BitmapFactory.decodeStream(input);
            Listener listener = listenerWeakReference.get();
            if (listener != null) {
                listener.onBitmapDownloadSuccess(url, bitmap);
            }
        } catch (Throwable t) {
            t.printStackTrace();
            Listener listener = listenerWeakReference.get();
            if (listener != null) {
                listener.onBitmapDownloadFailure(url);
            }
        }
    }
}
